package org.wupuser.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.wupuser.config.intercepter.TokenInterceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer {
	
	/**
	 * 创建并配置Token拦截器Bean 该方法用于将TokenInterceptor实例注册为Spring Bean，使其能够被Spring容器管理
	 *
	 * @return TokenInterceptor 返回一个TokenInterceptor实例，用于拦截和处理请求中的token信息
	 */
	@Bean
	public TokenInterceptor tokenInterceptor() {
		// 实例化并返回Token拦截器
		return new TokenInterceptor();
	}
	
	/**
	 * 添加拦截器配置
	 *
	 * @param registry 拦截器注册器，用于注册各种拦截器
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 注册token拦截器，并配置拦截路径
		registry.addInterceptor(tokenInterceptor())
			// 拦截所有路径
			.addPathPatterns("/**")
			// 排除登录路径，不进行拦截
			.excludePathPatterns("/admin/login");
	}
	
	/**
	 * 配置跨域资源共享(CORS)映射的方法
	 *
	 * @param registry  用于注册CORS映射的注册表
	 *
	 * @Override 注解表明这是重写父类的方法
	 */
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		// 添加跨域映射，"/**"表示对所有路径都生效
		registry.addMapping("/**")
			// 允许所有来源的跨域请求，"/**"表示允许任何域名
			.allowedOrigins("/**")
        // 允许所有的请求头
			// 允许发送凭据信息(如cookies)
        // 允许的HTTP方法，包括POST、GET、PUT、DELETE和OPTIONS
			.allowCredentials(true)
			.allowedHeaders("*")
			.allowedMethods(
				"POST",
				"GET",
				"PUT",
        // 预检请求的有效期为3600秒(1小时)
				"DELETE",
				"OPTIONS")
			.maxAge(3600);
	}
}
